{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# w2_冯炳驹_124298228\n",
    "\n",
    " Logistic回归分类计数实现 Rental Listing Inquiries "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>-73.9425</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>-73.9667</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>-74.0018</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>-73.9677</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>-73.9493</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 225 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  latitude  longitude  price  price_bathrooms  \\\n",
       "0        1.5         3   40.7145   -73.9425   3000           1200.0   \n",
       "1        1.0         2   40.7947   -73.9667   5465           2732.5   \n",
       "2        1.0         1   40.7388   -74.0018   2850           1425.0   \n",
       "3        1.0         1   40.7539   -73.9677   3275           1637.5   \n",
       "4        1.0         4   40.8241   -73.9493   3350           1675.0   \n",
       "\n",
       "   price_bedrooms  room_diff  room_num  Year       ...        walk  walls  \\\n",
       "0      750.000000       -1.5       4.5  2016       ...           0      0   \n",
       "1     1821.666667       -1.0       3.0  2016       ...           0      0   \n",
       "2     1425.000000        0.0       2.0  2016       ...           0      0   \n",
       "3     1637.500000        0.0       2.0  2016       ...           0      0   \n",
       "4      670.000000       -3.0       5.0  2016       ...           0      0   \n",
       "\n",
       "   war  washer  water  wheelchair  wifi  windows  work  interest_level  \n",
       "0    0       0      0           0     0        0     0               1  \n",
       "1    0       0      0           0     0        0     0               2  \n",
       "2    0       0      0           0     0        0     0               0  \n",
       "3    0       0      0           0     0        0     0               2  \n",
       "4    1       0      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 225 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "# path to where the data lies\n",
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 225 entries, bathrooms to interest_level\n",
      "dtypes: float64(7), int64(218)\n",
      "memory usage: 84.7 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6e92dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "train = train[0:10000]\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练和选择"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic回归分类 不带正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is:  [ 0.78126743  0.76395142  0.75549228  0.76958102  0.73417245]\n",
      "cv logloss is: 0.760892919342\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\linear_model\\base.py:340: RuntimeWarning: overflow encountered in exp\n",
      "  np.exp(prob, prob)\n"
     ]
    }
   ],
   "source": [
    "# 交叉验证用于评估模型性能和进行参数调优（模型选择）\n",
    "#分类任务中交叉验证缺省是采用StratifiedKFold\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "loss = cross_val_score(lr, X_train, y_train, cv=5, scoring='neg_log_loss')\n",
    "print 'logloss of each fold is: ',-loss\n",
    "print'cv logloss is:', -loss.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的 Logistic Regression及参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=4,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "#需要调优的参数\n",
    "# 请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（slover）\n",
    "#tuned_parameters = {'penalty':['l1','l2'],\n",
    "#                   'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "#                   }\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss', n_jobs = 4)\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([  2.83400011e-01,   1.73560004e+00,   6.39600039e-01,\n",
       "          3.40060005e+00,   7.59959998e+00,   8.63400002e+00,\n",
       "          3.70724000e+01,   2.64472000e+01,   8.35486000e+02,\n",
       "          5.00456000e+01,   1.05112900e+03,   8.38060000e+01,\n",
       "          1.18991920e+03,   8.31594000e+01]),\n",
       " 'mean_score_time': array([ 0.0138    ,  0.00519996,  0.00539999,  0.00439997,  0.00519996,\n",
       "         0.00500007,  0.00599999,  0.00580001,  0.00599995,  0.00520005,\n",
       "         0.00600004,  0.00599995,  0.00500002,  0.00479999]),\n",
       " 'mean_test_score': array([-0.86632768, -0.82176213, -0.74525498, -0.73740569, -0.69691301,\n",
       "        -0.73425761, -0.72830053, -0.76090061, -0.78180524, -0.79645562,\n",
       "        -0.80488543, -0.82743567, -0.820641  , -0.85454559]),\n",
       " 'mean_train_score': array([-0.86632762, -0.80442801, -0.74153395, -0.69724752, -0.66228505,\n",
       "        -0.66071808, -0.64597728, -0.6465853 , -0.64277115, -0.64247376,\n",
       "        -0.64226131, -0.64099082, -0.64291953, -0.6408677 ]),\n",
       " 'param_C': masked_array(data = [0.001 0.001 0.01 0.01 0.1 0.1 1 1 10 10 100 100 1000 1000],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'param_penalty': masked_array(data = ['l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2'],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'rank_test_score': array([14, 11,  5,  4,  1,  3,  2,  6,  7,  8,  9, 12, 10, 13]),\n",
       " 'split0_test_score': array([-0.86639174, -0.82435747, -0.74587575, -0.74647148, -0.70132197,\n",
       "        -0.74738332, -0.73109071, -0.78126743, -0.8122157 , -0.82780222,\n",
       "        -0.83304441, -0.86168175, -0.85226763, -0.89016363]),\n",
       " 'split0_train_score': array([-0.86631893, -0.80293546, -0.74071839, -0.69480513, -0.66182618,\n",
       "        -0.65934769, -0.64555057, -0.64581825, -0.64234945, -0.64184407,\n",
       "        -0.64179841, -0.64034399, -0.64196837, -0.64022828]),\n",
       " 'split1_test_score': array([-0.86639174, -0.82504691, -0.74547296, -0.74293094, -0.70007312,\n",
       "        -0.74116709, -0.7702506 , -0.76395142, -0.83922245, -0.80972552,\n",
       "        -0.84960114, -0.84089679, -0.85375267, -0.86948586]),\n",
       " 'split1_train_score': array([-0.86631893, -0.80446516, -0.74119666, -0.6980593 , -0.66435677,\n",
       "        -0.66187541, -0.64743871, -0.64742673, -0.64360619, -0.64287593,\n",
       "        -0.64298939, -0.64137411, -0.64342444, -0.6412512 ]),\n",
       " 'split2_test_score': array([-0.86644529, -0.81956768, -0.74279384, -0.73348371, -0.69393844,\n",
       "        -0.73031271, -0.71350653, -0.75549228, -0.75462218, -0.77245826,\n",
       "        -0.76702315, -0.79290103, -0.78375054, -0.8168826 ]),\n",
       " 'split2_train_score': array([-0.86625403, -0.80494513, -0.74257815, -0.69765003, -0.66224233,\n",
       "        -0.66060753, -0.64688381, -0.64685963, -0.64389456, -0.64324929,\n",
       "        -0.643361  , -0.64185871, -0.64352408, -0.64174566]),\n",
       " 'split3_test_score': array([-0.86644529, -0.82464155, -0.74929696, -0.74144189, -0.70227496,\n",
       "        -0.7387688 , -0.72001112, -0.76958102, -0.7589005 , -0.8065196 ,\n",
       "        -0.78323677, -0.83541354, -0.78124586, -0.8556945 ]),\n",
       " 'split3_train_score': array([-0.86625403, -0.8038266 , -0.74064707, -0.69648808, -0.66085924,\n",
       "        -0.6594439 , -0.64439768, -0.64488552, -0.6416891 , -0.64061213,\n",
       "        -0.64109504, -0.6392321 , -0.64363791, -0.63909053]),\n",
       " 'split4_test_score': array([-0.8659639 , -0.81518751, -0.74283254, -0.72267842, -0.68694278,\n",
       "        -0.71362547, -0.70659963, -0.73417245, -0.74398363, -0.76571947,\n",
       "        -0.79147185, -0.80624021, -0.83216744, -0.84046201]),\n",
       " 'split4_train_score': array([-0.86649216, -0.8059677 , -0.74252948, -0.69923504, -0.66214075,\n",
       "        -0.66231587, -0.64561561, -0.64793636, -0.64231644, -0.64378737,\n",
       "        -0.64206273, -0.64214517, -0.64204286, -0.64202282]),\n",
       " 'std_fit_time': array([  6.47876410e-02,   4.75629567e-02,   4.33156118e-02,\n",
       "          5.98851717e-02,   2.04149997e+00,   2.62272357e-01,\n",
       "          1.04756218e+01,   1.91737108e+00,   3.11472923e+02,\n",
       "          3.22278163e+00,   2.08384402e+02,   1.10360969e+01,\n",
       "          3.19876261e+02,   1.13226755e+01]),\n",
       " 'std_score_time': array([ 0.01218858,  0.00039992,  0.00048994,  0.00048982,  0.00040004,\n",
       "         0.00063241,  0.00063249,  0.00074839,  0.00063249,  0.00039999,\n",
       "         0.00063241,  0.00109541,  0.00089447,  0.00040002]),\n",
       " 'std_test_score': array([ 0.00018335,  0.00384248,  0.00239542,  0.00849849,  0.00576792,\n",
       "         0.01167311,  0.02247893,  0.01576456,  0.03719202,  0.02358051,\n",
       "         0.03122749,  0.02473766,  0.03207268,  0.02494222]),\n",
       " 'std_train_score': array([  8.72398537e-05,   1.02262796e-03,   8.54036047e-04,\n",
       "          1.50421125e-03,   1.14526546e-03,   1.21705050e-03,\n",
       "          1.07383346e-03,   1.10328907e-03,   8.38422523e-04,\n",
       "          1.12702581e-03,   8.18940678e-04,   1.07183447e-03,\n",
       "          7.49631484e-04,   1.07882907e-03])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.696913006652\n",
      "{'penalty': 'l1', 'C': 0.1}\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "#默认cv logloss ：0.677931611942 ， 增加了L1 正则后减少了\n",
    "#logloss 越少越好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/g+MweHGUtA4+gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x13315cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用LogisticRegressionCV实现正则化的 Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.01, 0.1, 1, 10], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=5, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.01, 0.1, 1, 10]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L1正则 --> 可选用saga优化求解器(0.19版本新功能)\n",
    "# LogisticRegressionCV比GridSearchCV快\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l1', solver='liblinear', multi_class='ovr', n_jobs = 5)\n",
    "lrcv_L1.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: array([[-0.26046777, -0.23710199, -0.25584491, -0.28590888],\n",
       "        [-0.26062878, -0.23105087, -0.26078148, -0.30571437],\n",
       "        [-0.26153291, -0.23352474, -0.24972999, -0.27278721],\n",
       "        [-0.2624764 , -0.23432856, -0.24056009, -0.2447087 ],\n",
       "        [-0.26018606, -0.2362609 , -0.24731741, -0.27415905]]),\n",
       " 1: array([[-0.51750508, -0.50150328, -0.53125711, -0.57456653],\n",
       "        [-0.51616842, -0.5068222 , -0.53954768, -0.58839038],\n",
       "        [-0.5142729 , -0.50022265, -0.53670047, -0.56449595],\n",
       "        [-0.5177198 , -0.50461334, -0.54288149, -0.5866701 ],\n",
       "        [-0.51438899, -0.48796509, -0.50616408, -0.53794775]]),\n",
       " 2: array([[-0.56193538, -0.53276308, -0.56780616, -0.59702455],\n",
       "        [-0.56182315, -0.53063046, -0.58560675, -0.6226743 ],\n",
       "        [-0.55738944, -0.52464489, -0.53271591, -0.54660723],\n",
       "        [-0.56405694, -0.53228538, -0.56411669, -0.5598696 ],\n",
       "        [-0.55958172, -0.51961942, -0.53939346, -0.56851595]])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.26105838 -0.23445341 -0.25084678 -0.27665564]\n",
      "[-0.51601104 -0.50022531 -0.53131017 -0.57041415]\n",
      "[-0.56095733 -0.52798865 -0.55792779 -0.57893833]\n",
      "[[-0.23445341]\n",
      " [-0.50022531]\n",
      " [-0.52798865]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.42088912330343109"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_classes = 3\n",
    "scores_max =  np.zeros((n_classes,1))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        scores_max[j][:] = lrcv_L1.scores_[j].mean(axis = 0).max()\n",
    "        print(lrcv_L1.scores_[j].mean(axis = 0))\n",
    "        \n",
    "print(scores_max)\n",
    "        \n",
    "lrcv_L1_logloss = -np.mean(scores_max)\n",
    "lrcv_L1_logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12ebbb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# scores_：dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "n_classes = 3\n",
    "scores =  np.zeros((n_classes,n_Cs))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        scores[j][:] = np.mean(lrcv_L1.scores_[j],axis = 0)\n",
    "    \n",
    "mse_mean = np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -1.96852563e-01,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,  -3.79606977e-01,  -4.73997340e+00,\n",
       "         -3.30479201e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   6.01153999e-02,  -9.06928261e-02,\n",
       "          4.24552727e-03,   0.00000000e+00,   3.28476367e-01,\n",
       "         -4.55864438e-02,   2.49782397e-02,   1.29086426e-01,\n",
       "          0.00000000e+00,  -7.97676197e-02,  -1.50151237e-01,\n",
       "         -7.96378463e-03,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "         -2.03973609e-03,   0.00000000e+00,   0.00000000e+00,\n",
       "          6.89413472e-02,  -5.40261785e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -5.68193573e-02,   0.00000000e+00,\n",
       "         -4.82383127e-02,   0.00000000e+00,   2.12218520e-02,\n",
       "          3.22650646e-02,   6.71377839e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -4.78065927e-02,   0.00000000e+00,\n",
       "         -3.21956523e-02,  -9.65528852e-03,  -5.22560694e-03,\n",
       "          0.00000000e+00,   0.00000000e+00,  -1.67763762e-02,\n",
       "         -2.89983119e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          5.51324817e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -1.51415213e-02,\n",
       "         -1.39090051e-02,   0.00000000e+00,   1.43065191e-03,\n",
       "         -4.02888303e-02,   0.00000000e+00,   5.01057645e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,  -5.89606466e-02,\n",
       "          3.45922980e-02,   2.97420388e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   3.15195390e-02,   3.72860165e-02,\n",
       "         -3.53445248e-02,   1.36780106e-02,   1.83423553e-02,\n",
       "         -2.08149266e-02,  -2.12199949e-01,  -4.83232817e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "          1.21555630e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          6.87315830e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          2.35667876e-01,  -8.94675735e-02,   0.00000000e+00,\n",
       "         -9.15621452e-03,  -4.79604193e-02,   9.39480268e-02,\n",
       "          0.00000000e+00,  -4.81348412e-03,  -1.25543891e-01,\n",
       "         -2.77491542e-02,   1.07539188e-01,  -2.72005447e-02,\n",
       "         -4.64537798e-02,   0.00000000e+00,  -2.32950128e-02,\n",
       "          2.52812059e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          8.43900633e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   9.58745211e-02,\n",
       "         -1.76241168e-02,  -5.26290190e-03,  -4.41378728e-03,\n",
       "          2.10640173e-02,  -5.24167998e-02,   6.33926639e-02,\n",
       "         -2.62543039e-02,   0.00000000e+00,   1.27082860e-01,\n",
       "          0.00000000e+00,  -3.07247543e-02,   0.00000000e+00,\n",
       "          2.18064612e-03,   2.34456971e-02,   0.00000000e+00,\n",
       "          3.76662292e-02,  -1.44061600e-02,  -7.89431277e-03,\n",
       "          0.00000000e+00,   0.00000000e+00,  -8.29937639e-03,\n",
       "         -7.02382331e-02,  -2.66527897e-02,  -2.46758225e-03,\n",
       "          0.00000000e+00,  -2.95089318e-02,   6.53188078e-02,\n",
       "         -1.94858678e-02,  -5.48176674e-02,   3.36988912e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,   5.36354233e-02,\n",
       "         -6.10280515e-03,   4.09220486e-02,   0.00000000e+00,\n",
       "         -1.71109284e-05,   2.85978435e-02,   3.84346366e-03,\n",
       "         -1.81036612e-02,  -5.90375155e-03,   2.39763319e-02,\n",
       "         -5.52936069e-02,   0.00000000e+00,  -1.02064581e-01,\n",
       "         -1.29444830e-02,   0.00000000e+00,   1.30884079e-02,\n",
       "          0.00000000e+00,   4.94242576e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -3.02404947e-02,   0.00000000e+00,\n",
       "         -2.45848045e-04,  -1.71520584e-02,   0.00000000e+00,\n",
       "          6.78854485e-02,   1.12365254e-01,   0.00000000e+00,\n",
       "         -3.59523220e-02,  -1.87613471e-02,   3.63948427e-03,\n",
       "          5.74909953e-02,  -2.20430676e-01,  -9.73154014e-02,\n",
       "          0.00000000e+00,   1.41708289e-02,   6.86641189e-02,\n",
       "          1.31967422e-02,   0.00000000e+00,  -3.22735856e-02,\n",
       "         -3.08709986e-04,   0.00000000e+00,   5.15258282e-02,\n",
       "          0.00000000e+00,   2.47532298e-02,   2.85589672e-02,\n",
       "         -1.68684207e-02,   0.00000000e+00,  -1.70425588e-03,\n",
       "          2.43369849e-02,   0.00000000e+00,  -2.39950589e-02,\n",
       "          2.01405645e-02,   1.16551144e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -5.80152317e-02,   0.00000000e+00,\n",
       "         -2.21165977e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "         -8.60554979e-03,   3.92524308e-02,   0.00000000e+00,\n",
       "          3.33861852e-02,  -1.28842555e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -6.70473184e-02,\n",
       "         -3.15761895e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00],\n",
       "       [ -8.33471553e-02,   0.00000000e+00,  -5.09091745e-03,\n",
       "         -1.42994752e-02,  -4.42142162e-01,  -4.28280855e+00,\n",
       "         -8.87872108e-01,  -1.98846878e-01,   0.00000000e+00,\n",
       "          0.00000000e+00,  -7.85803348e-02,   1.92449075e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,   1.70784823e-01,\n",
       "          3.26421515e-02,   0.00000000e+00,  -1.06306953e-03,\n",
       "          1.20983177e-02,   0.00000000e+00,  -1.92732580e-02,\n",
       "          0.00000000e+00,   3.90186704e-03,   2.62372001e-02,\n",
       "         -1.00811921e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "         -6.19233194e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,  -1.99020445e-02,   0.00000000e+00,\n",
       "          8.68936457e-03,   4.06671475e-02,   0.00000000e+00,\n",
       "         -5.94698058e-03,   0.00000000e+00,   2.07234665e-03,\n",
       "         -1.05551510e-02,  -2.86660427e-02,   0.00000000e+00,\n",
       "          4.91812811e-02,  -2.02343704e-03,   3.77745798e-02,\n",
       "          1.83944289e-02,   2.54399927e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -2.26329178e-02,\n",
       "          5.87425946e-02,   1.26796862e-02,   0.00000000e+00,\n",
       "          7.39950928e-02,  -5.05751963e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   8.35050423e-02,  -1.52634302e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,  -1.15607693e-02,\n",
       "          2.85553355e-03,   0.00000000e+00,   0.00000000e+00,\n",
       "         -5.32114965e-03,  -4.69202875e-02,   0.00000000e+00,\n",
       "          5.06196878e-02,   0.00000000e+00,   2.82989943e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -2.60175649e-02,\n",
       "          3.12219959e-02,   2.26410266e-02,   3.57672271e-02,\n",
       "         -1.69649874e-02,  -4.07297141e-02,  -6.15111221e-03,\n",
       "         -6.29320361e-02,   7.90849742e-03,   7.37561082e-03,\n",
       "         -2.96962556e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -1.38956073e-03,\n",
       "          1.94997333e-01,   1.98643363e-02,  -5.76346602e-02,\n",
       "         -3.56452866e-02,  -6.30110821e-03,   2.17771114e-01,\n",
       "          0.00000000e+00,  -4.53525631e-03,   0.00000000e+00,\n",
       "          4.88977865e-02,   1.07035789e-01,  -8.27916298e-02,\n",
       "          1.25480471e-02,   3.20407589e-02,  -3.85532297e-02,\n",
       "         -1.02948274e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   8.01817550e-02,\n",
       "         -5.43267276e-02,  -1.37870652e-03,   0.00000000e+00,\n",
       "          3.55495674e-02,  -4.30552663e-03,  -4.00551933e-02,\n",
       "         -3.16978303e-02,   7.95215502e-02,   0.00000000e+00,\n",
       "          2.68163187e-02,   0.00000000e+00,   3.12919596e-02,\n",
       "         -5.61241221e-04,  -8.00805538e-02,  -1.57477861e-02,\n",
       "         -3.59928432e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          3.05149017e-02,   0.00000000e+00,  -2.76469372e-02,\n",
       "          0.00000000e+00,   6.28559388e-02,   0.00000000e+00,\n",
       "         -5.22676955e-02,   1.28998296e-02,  -8.50743445e-03,\n",
       "         -3.43355972e-04,   2.46290152e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -1.23605723e-04,   0.00000000e+00,\n",
       "         -3.38028915e-02,   0.00000000e+00,  -3.61507913e-02,\n",
       "         -1.33681728e-02,  -1.54321516e-02,   0.00000000e+00,\n",
       "         -9.29334149e-03,   2.44441225e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "         -4.27120470e-02,  -1.78441824e-01,   7.66069756e-02,\n",
       "         -4.33088037e-02,  -2.46441383e-02,   1.22457724e-02,\n",
       "          1.74806639e-02,   1.25026428e-02,   3.59000603e-03,\n",
       "         -5.57413430e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "         -1.68114817e-03,   0.00000000e+00,  -3.66475914e-02,\n",
       "          5.10027113e-02,   2.32320588e-03,   0.00000000e+00,\n",
       "          1.93996532e-03,  -7.27479741e-02,   1.51838493e-03,\n",
       "          1.60616795e-02,  -3.46687969e-02,   2.07152373e-02,\n",
       "         -7.04361268e-02,   0.00000000e+00,   4.07837211e-03,\n",
       "          3.69137839e-04,  -2.28535989e-02,   0.00000000e+00,\n",
       "          5.16958672e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "         -3.02984968e-02,  -4.09893058e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   5.37676994e-03,   2.28765589e-02,\n",
       "          1.81390334e-02,   3.07390961e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   1.95256477e-02,\n",
       "         -2.58077479e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,  -4.59596914e-03,  -3.41717285e-02,\n",
       "         -4.94195456e-03,  -9.25496281e-02,   1.59212434e-02,\n",
       "          5.56809384e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,  -4.29100435e-02,\n",
       "         -1.86309494e-02,   0.00000000e+00],\n",
       "       [  5.73349782e-02,  -7.01348985e-02,   0.00000000e+00,\n",
       "          5.93873129e-03,   2.04431363e+00,   3.61582055e+00,\n",
       "          1.55003477e+00,   1.25248388e-01,  -3.72885399e-03,\n",
       "          0.00000000e+00,   2.04963802e-02,   1.56940604e-03,\n",
       "         -2.00874759e-03,   1.91360606e-02,  -3.01478646e-01,\n",
       "         -1.48045428e-02,  -6.07035543e-03,  -2.91235718e-02,\n",
       "         -1.17041445e-02,   2.04249291e-02,   5.77721226e-02,\n",
       "          3.95089684e-02,  -3.15428236e-02,  -1.25425085e-02,\n",
       "          6.71472178e-03,  -1.68675551e-03,   0.00000000e+00,\n",
       "          6.18460580e-02,   0.00000000e+00,   0.00000000e+00,\n",
       "         -9.80441476e-03,   3.05746851e-02,  -2.37763782e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,  -5.59654132e-02,\n",
       "          3.07601278e-02,   0.00000000e+00,  -1.46764670e-02,\n",
       "          0.00000000e+00,   0.00000000e+00,   2.60000722e-02,\n",
       "         -3.63053334e-02,   2.38446275e-02,  -4.14913379e-02,\n",
       "         -4.65325180e-03,  -1.48760733e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,   0.00000000e+00,   4.83950779e-02,\n",
       "         -3.91457502e-02,  -1.57922251e-02,   6.10511054e-03,\n",
       "         -8.82368500e-02,   1.11528136e-02,   0.00000000e+00,\n",
       "          1.42870969e-02,  -7.79403518e-02,   3.30040242e-03,\n",
       "          3.55023398e-02,   0.00000000e+00,   1.04391838e-02,\n",
       "          5.27008749e-04,   0.00000000e+00,  -2.14565005e-02,\n",
       "          6.23589171e-02,   2.00384986e-02,  -3.64210523e-02,\n",
       "         -4.61085930e-02,   0.00000000e+00,   8.40346583e-03,\n",
       "         -4.50203198e-03,  -3.49565114e-03,   7.97722625e-04,\n",
       "         -5.31663899e-03,  -1.33835336e-03,   0.00000000e+00,\n",
       "         -3.33746248e-04,  -3.72407117e-02,  -2.27538106e-02,\n",
       "          2.85512930e-02,   1.52387869e-01,   2.47934393e-02,\n",
       "          6.63102640e-02,  -6.22094387e-03,  -1.08197379e-02,\n",
       "          5.67521062e-03,  -7.44762458e-03,   0.00000000e+00,\n",
       "         -3.87068532e-02,  -1.72340539e-03,   3.93801944e-04,\n",
       "         -2.53995651e-01,   0.00000000e+00,   1.73667839e-02,\n",
       "          4.33305336e-02,   2.06942125e-02,  -3.56437008e-02,\n",
       "         -1.79426154e-02,   1.30275877e-02,   0.00000000e+00,\n",
       "          0.00000000e+00,  -1.49596015e-01,   7.06637137e-02,\n",
       "          0.00000000e+00,  -3.88781069e-02,   4.93949679e-02,\n",
       "         -4.57859273e-03,   0.00000000e+00,  -1.80071771e-01,\n",
       "         -2.54297443e-02,   0.00000000e+00,  -1.41126381e-02,\n",
       "          6.32187472e-02,   2.06699182e-02,  -5.21901616e-02,\n",
       "         -2.84333913e-02,   2.01496866e-02,   2.98647142e-02,\n",
       "          0.00000000e+00,  -4.68755971e-02,  -3.11802102e-03,\n",
       "         -8.43117511e-04,  -6.10382290e-03,  -8.61236722e-02,\n",
       "         -9.79923365e-04,   9.03741081e-02,   4.48658948e-02,\n",
       "          0.00000000e+00,  -6.01743410e-03,   1.73432849e-02,\n",
       "         -5.00545709e-02,   0.00000000e+00,   1.97366707e-02,\n",
       "          8.20956761e-02,  -7.23832681e-02,   0.00000000e+00,\n",
       "          5.81155320e-02,   0.00000000e+00,   2.32783750e-02,\n",
       "          1.91995742e-03,   0.00000000e+00,  -1.55789296e-02,\n",
       "          0.00000000e+00,   2.33507648e-02,  -4.17078139e-02,\n",
       "          2.45426456e-02,   0.00000000e+00,  -1.53841482e-02,\n",
       "          1.97009823e-02,   0.00000000e+00,   5.33326600e-03,\n",
       "          1.10232503e-02,  -4.45570684e-02,  -1.80243998e-03,\n",
       "          6.11027053e-04,   1.15918711e-02,  -2.32652538e-02,\n",
       "          8.63693339e-04,   1.15394684e-01,  -2.46041340e-02,\n",
       "          3.77153306e-02,   0.00000000e+00,  -3.06428053e-02,\n",
       "         -4.96622769e-02,  -1.35817928e-02,  -7.01301963e-03,\n",
       "          7.82318009e-02,   3.41518106e-02,  -2.02319849e-02,\n",
       "          0.00000000e+00,   2.27159795e-02,   2.91952798e-04,\n",
       "         -4.92314379e-02,  -8.26711681e-02,   1.67648347e-02,\n",
       "         -1.60492738e-02,   0.00000000e+00,  -1.70919955e-03,\n",
       "         -3.55764681e-03,   1.18658799e-01,   1.47664019e-02,\n",
       "         -7.55176245e-03,   2.15657435e-03,  -3.85579612e-02,\n",
       "          3.24097037e-02,  -7.36752024e-02,  -1.49478402e-02,\n",
       "          0.00000000e+00,  -5.53029647e-04,  -2.40682158e-02,\n",
       "         -2.47451321e-02,  -6.45790678e-04,  -3.10473787e-02,\n",
       "          4.96576593e-02,   2.92667062e-02,   0.00000000e+00,\n",
       "         -2.43038332e-02,  -1.59376707e-02,   0.00000000e+00,\n",
       "         -7.77842678e-02,  -4.29717262e-02,   1.57890661e-03,\n",
       "          1.22014033e-02,   0.00000000e+00,  -3.27309566e-02,\n",
       "          4.26570732e-02,   4.10772309e-03,   4.73841784e-03,\n",
       "          3.26435088e-02,  -2.69674223e-02,   4.38838302e-02,\n",
       "         -3.69976427e-02,   7.30171586e-02,  -3.94138257e-03,\n",
       "         -3.80075987e-02,   6.64237888e-02,   1.74597458e-02,\n",
       "          3.94745933e-02,  -8.53246748e-04,   3.33696959e-04,\n",
       "          8.59359883e-03,   0.00000000e+00]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=5, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# L2\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1, 10,100,1000]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L2正则 --> 缺省用lbfgs，为了和GridSeachCV比较，也用liblinear\n",
    "\n",
    "lr_cv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', solver='liblinear', multi_class='ovr', n_jobs = 5)\n",
    "lr_cv_L2.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: array([[-0.26718098, -0.28534999, -0.2930114 , -0.30148269],\n",
       "        [-0.28080107, -0.32499278, -0.35042629, -0.36637244],\n",
       "        [-0.26485784, -0.2850826 , -0.30510324, -0.32320943],\n",
       "        [-0.24673507, -0.25632445, -0.26241238, -0.26643036],\n",
       "        [-0.25870335, -0.27710547, -0.2980345 , -0.32091085]]),\n",
       " 1: array([[-0.55472178, -0.58959333, -0.61786987, -0.64181131],\n",
       "        [-0.56728133, -0.60665854, -0.63466484, -0.65943917],\n",
       "        [-0.56215065, -0.58682136, -0.60761326, -0.62637622],\n",
       "        [-0.57259095, -0.5999048 , -0.62685423, -0.65008832],\n",
       "        [-0.5291446 , -0.55112324, -0.57816577, -0.60049902]]),\n",
       " 2: array([[-0.60073631, -0.63447207, -0.66878853, -0.69618306],\n",
       "        [-0.58317007, -0.61629918, -0.64252921, -0.66896026],\n",
       "        [-0.57738287, -0.59589411, -0.60974355, -0.62520875],\n",
       "        [-0.57764406, -0.60265575, -0.62433452, -0.63623632],\n",
       "        [-0.55696845, -0.57997277, -0.60959768, -0.63101799]])}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_cv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.26365566 -0.28577106 -0.30179756 -0.31568116]\n",
      "[-0.55717786 -0.58682025 -0.61303359 -0.63564281]\n",
      "[-0.57918035 -0.60585877 -0.6309987  -0.65152128]\n",
      "[[-0.26365566]\n",
      " [-0.55717786]\n",
      " [-0.57918035]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.46667129246297351"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_classes = 3\n",
    "scores_max =  np.zeros((n_classes,1))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        print(lr_cv_L2.scores_[j].mean(axis = 0))\n",
    "        scores_max[j][:] = lr_cv_L2.scores_[j].mean(axis = 0).max()\n",
    "        \n",
    "print (scores_max)\n",
    "lrcv_L2_logloss = -np.mean(scores_max)\n",
    "lrcv_L2_logloss\n",
    "#lrcv_L2_logloss < lrcv_L1_logloss < grid_logloss < default"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nKv4/2N6HX5rWKhcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x111854a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "Cs = [1, 10,100,1000]\n",
    "n_Cs = len(Cs)\n",
    "n_classes = 3\n",
    "scores =  np.zeros((n_classes,n_Cs))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        scores[j][:] = np.mean(lr_cv_L2.scores_[j],axis = 0)\n",
    "    \n",
    "mse_mean = np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -9.78380123e-02,   5.45101097e-02,  -1.86343844e-01,\n",
       "         -1.85347703e-01,  -3.80044919e+00,  -5.03789507e+00,\n",
       "         -3.08479540e+00,  -1.15144295e-01,   8.41773443e-03,\n",
       "          0.00000000e+00,   6.55406075e-02,  -1.14621675e-01,\n",
       "          1.73209997e-02,   1.27402736e-02,   3.49493997e-01,\n",
       "         -9.75219234e-02,   1.27100749e-01,   2.07574494e-01,\n",
       "          1.36311258e-02,  -1.02434904e-01,  -1.73377459e-01,\n",
       "         -3.57179756e-02,  -7.07988127e-02,   3.24296402e-03,\n",
       "          5.67477253e-02,   1.65940333e-01,   2.94294380e-01,\n",
       "          8.20816779e-02,   4.06715490e-02,   5.88329013e-03,\n",
       "          4.71164743e-02,  -2.12837189e-01,   4.13898407e-01,\n",
       "         -2.18135405e-01,  -1.20420107e-01,  -2.03342448e-02,\n",
       "         -1.62143350e-01,  -1.00782100e-01,   2.32908474e-02,\n",
       "          7.88980528e-02,   8.58302988e-02,  -4.59379227e-02,\n",
       "          1.23831877e-01,  -1.48412664e-01,   3.52223567e-03,\n",
       "         -1.51319167e-01,  -5.73880951e-02,  -9.99548101e-03,\n",
       "         -1.32470070e-01,  -4.39478187e-03,  -3.44005352e-02,\n",
       "         -9.60811671e-02,   5.41374963e-02,  -6.84370238e-02,\n",
       "         -2.44230545e-01,   2.72242220e-02,   3.98463750e-03,\n",
       "         -7.73649418e-02,  -8.69828486e-02,  -8.35952196e-02,\n",
       "         -1.07843974e-02,   1.98504306e-02,  -2.02436020e-01,\n",
       "         -9.03640859e-02,  -5.40973216e-02,   1.89645155e-01,\n",
       "         -1.00898552e-01,   2.79131494e-02,   1.78315416e-01,\n",
       "         -3.16818659e-02,   1.33985288e-01,  -1.26659572e-01,\n",
       "         -9.26881998e-04,   2.10943084e-01,   8.86492316e-02,\n",
       "         -9.86512829e-02,  -6.97165276e-02,   5.71888147e-02,\n",
       "         -4.29319546e-01,   3.56922353e-01,   6.78188166e-02,\n",
       "         -3.54428141e-01,  -1.88934061e-01,  -1.00898552e-01,\n",
       "         -3.35810565e-02,   8.45453594e-04,  -2.15098266e-01,\n",
       "          1.52998421e-02,   7.50959808e-03,  -1.99763310e-02,\n",
       "          9.16668908e-02,  -1.14790048e-01,  -1.34429302e-02,\n",
       "          2.57155679e-01,  -1.40644684e-01,  -3.14730602e-03,\n",
       "         -7.83295965e-02,  -1.49050054e-01,  -1.58452402e-01,\n",
       "         -3.20226345e-02,  -1.42326087e-02,  -1.56674487e-01,\n",
       "         -3.16673144e-01,   1.33051457e-01,  -4.59433814e-02,\n",
       "         -2.22038653e-01,  -4.46693077e-02,  -1.15430419e-02,\n",
       "          9.65244268e-02,  -1.64121829e-01,   2.37922235e-01,\n",
       "          1.40564088e-01,  -2.93674945e-02,   3.34630154e-01,\n",
       "         -1.55498189e-01,  -4.42544720e-02,   2.05323097e-01,\n",
       "         -8.24753658e-02,  -1.09556685e-01,  -7.94924569e-02,\n",
       "          1.07027863e-01,  -3.21698133e-01,  -1.04151094e-01,\n",
       "          1.54355106e-01,   6.44657447e-02,   5.91286668e-01,\n",
       "          1.31899171e-02,  -5.38607939e-02,  -4.00581022e-01,\n",
       "          7.46500359e-02,   1.74819789e-01,   6.15368450e-02,\n",
       "          5.43496054e-02,  -4.60866637e-02,   4.88839095e-02,\n",
       "         -1.65978481e-01,   1.26376648e-01,  -1.94995031e-01,\n",
       "         -3.43866404e-01,  -2.86962965e-01,  -9.98471942e-02,\n",
       "         -5.77743600e-02,  -1.31662707e-01,   7.18263576e-02,\n",
       "         -5.75609235e-02,  -1.89371540e-01,   7.33636898e-03,\n",
       "         -2.14560498e-01,   9.53147802e-02,  -1.27166647e-01,\n",
       "         -1.32653854e-01,   1.07650267e-01,   1.31266309e-01,\n",
       "         -1.42326087e-02,   4.88760109e-02,   4.71164743e-02,\n",
       "         -9.27598475e-02,  -2.40763898e-01,   1.22919421e-01,\n",
       "         -4.28424266e-02,   6.74358341e-02,  -1.75894786e-01,\n",
       "         -2.47988071e-01,   1.94437064e-02,   4.25877055e-02,\n",
       "          1.65509003e-04,   7.80201309e-02,   1.35602975e-02,\n",
       "         -2.19533260e-01,  -3.00882626e-02,   1.21060942e-01,\n",
       "         -1.02604601e-01,  -1.69985072e-01,  -3.86450381e-01,\n",
       "          6.96814849e-02,   1.91631273e-01,   2.82045852e-02,\n",
       "         -2.39870274e-01,  -9.97196167e-02,   2.05209011e-01,\n",
       "          3.82723503e-02,  -2.18281444e-01,  -3.92148920e-01,\n",
       "          9.48202634e-03,   2.43011957e-02,   1.93886783e-04,\n",
       "          5.10149817e-02,  -1.20680963e-01,  -3.41124534e-01,\n",
       "         -7.19775292e-02,   1.35943315e-01,   1.31810804e-01,\n",
       "         -3.74609233e-02,   3.00589881e-02,   4.62969951e-01,\n",
       "         -8.06414618e-02,  -8.56041128e-02,   3.16085315e-01,\n",
       "          2.71708553e-01,   2.02461803e-01,  -1.17212138e-01,\n",
       "          3.82723503e-02,   1.38295265e-02,  -1.11484379e-01,\n",
       "         -1.05659151e-01,  -1.37785496e-01,   3.85331270e-02,\n",
       "         -8.92254965e-02,  -2.26171978e-01,  -3.50789431e-02,\n",
       "         -7.07633409e-02,   2.60248047e-01,  -1.07286683e-01,\n",
       "          5.77362687e-02,  -1.33887563e-01,  -5.72231919e-02,\n",
       "          5.12727429e-02,  -3.13242953e-02,  -5.00179353e-02,\n",
       "         -1.02791473e-01,   6.48079706e-03,  -5.22879458e-02,\n",
       "          1.11473057e-02,  -1.66221869e-02],\n",
       "       [ -7.22655063e-02,   8.73710026e-02,  -2.21946208e-01,\n",
       "         -2.29368952e-01,  -1.73480338e+00,  -3.99192996e+00,\n",
       "         -9.09856023e-01,  -1.40320293e-01,   4.26574070e-02,\n",
       "          0.00000000e+00,  -5.19514795e-02,   3.78099101e-02,\n",
       "          9.09810693e-04,  -3.25354176e-02,   1.64059048e-01,\n",
       "          9.01885880e-02,  -3.50640222e-02,  -2.77323497e-02,\n",
       "          2.61320733e-02,   2.25680091e-02,  -3.21601987e-02,\n",
       "         -6.49374656e-02,   5.08710319e-02,   4.58228974e-02,\n",
       "         -5.95069327e-01,  -3.40480443e-02,  -5.85944683e-01,\n",
       "         -6.70672172e-01,   2.98108811e-02,  -2.24633807e-02,\n",
       "          2.54793138e-03,  -4.89104170e-02,  -3.64517243e-01,\n",
       "          6.20569522e-02,   4.42224655e-02,  -2.99559756e-03,\n",
       "          5.28446441e-02,   1.84450351e-02,   1.04223511e-02,\n",
       "         -2.72589871e-02,  -4.49103013e-02,  -7.42720060e-02,\n",
       "         -8.59676299e-03,  -3.90771493e-03,   2.96055805e-01,\n",
       "          3.94095141e-02,   8.39467947e-02,   9.18884193e-02,\n",
       "          9.62882453e-02,  -1.63503007e-01,  -4.13408221e-01,\n",
       "          1.78083647e-01,   2.01142755e-02,  -6.13600329e-02,\n",
       "         -6.02138550e-02,  -1.64042856e-01,  -8.80038641e-03,\n",
       "          1.90994057e-01,   1.68353267e-01,   7.73564905e-03,\n",
       "          3.23809547e-01,   5.05587883e-02,   1.14658472e-01,\n",
       "         -4.33448917e-02,   3.31669900e-04,   1.56984276e-01,\n",
       "         -1.72277956e-02,  -1.35435407e-01,  -8.92625795e-02,\n",
       "          8.25752654e-01,   1.19980732e-02,   4.91960569e-02,\n",
       "         -1.25307459e-01,   2.52766155e-02,   2.13237217e-01,\n",
       "         -2.46028192e-02,  -1.24025647e-01,  -1.04318366e-01,\n",
       "          3.51359194e-01,   1.77805803e-01,   4.22256959e-02,\n",
       "          1.56004292e-01,  -3.84296689e-02,  -1.72277956e-02,\n",
       "         -4.58960336e-02,   1.79366334e-02,   2.45021977e-02,\n",
       "          1.97002542e-01,   1.52598941e-02,   1.89115440e-02,\n",
       "          7.17690595e-03,   2.11013505e-02,  -4.57807726e-02,\n",
       "          2.06373512e-01,   2.98963317e-02,  -3.94841103e-01,\n",
       "         -1.13152395e-01,  -6.21519310e-04,   5.86609668e-01,\n",
       "         -3.86315596e-01,  -3.65723010e-02,   1.20049572e-01,\n",
       "          2.61789646e-01,   1.23188358e-01,  -1.76084931e-02,\n",
       "          3.18580413e-01,   3.75790087e-02,  -3.09111158e-02,\n",
       "         -6.43870570e-02,   5.35965585e-02,  -3.68529710e-01,\n",
       "          3.27249583e-03,   5.77434357e-02,  -1.28166967e-01,\n",
       "         -1.81655840e-01,  -9.39997104e-02,  -5.36755765e-02,\n",
       "          1.69212126e-01,   5.91575550e-02,  -1.10241387e-01,\n",
       "         -1.30927510e-01,   2.34655128e-01,   9.31034007e-02,\n",
       "          3.35193917e-02,  -3.20017162e-02,   2.13616246e-01,\n",
       "         -1.19718492e-01,  -1.21375605e-01,  -3.81654611e-01,\n",
       "         -2.58388812e-01,   5.25180891e-01,  -1.05265308e-01,\n",
       "          4.16782812e-02,   1.62740380e-01,  -5.37738556e-02,\n",
       "          6.11929438e-02,   2.45181239e-01,   1.13708370e-01,\n",
       "         -4.84333767e-01,   1.73298809e-02,  -7.15617524e-02,\n",
       "          1.08613041e-01,   3.88369426e-01,   1.12317146e-01,\n",
       "         -8.89431395e-02,  -2.30483025e-01,  -5.47483345e-02,\n",
       "          1.43911509e-03,  -7.50168267e-01,   6.01872331e-02,\n",
       "         -6.71136964e-02,  -2.58595860e-01,  -3.00706785e-01,\n",
       "         -3.65723010e-02,   4.15446982e-02,   2.54793138e-03,\n",
       "         -7.81033979e-03,  -5.91056052e-01,   2.61843373e-03,\n",
       "         -2.69294134e-02,  -2.41777630e-01,   1.00800722e-01,\n",
       "         -6.31859140e-02,  -3.22584857e-01,   2.53593961e-02,\n",
       "          2.16991356e-02,   8.16935703e-02,  -3.10645236e-03,\n",
       "         -3.15956720e-01,  -2.06288193e-01,   1.30585777e-01,\n",
       "          1.55702111e-02,  -1.61382823e-02,  -1.67149515e-01,\n",
       "         -1.08781940e-02,   6.71395548e-02,  -1.34428890e-01,\n",
       "          2.23552333e-01,   2.25506143e-02,  -9.76843272e-03,\n",
       "          1.96929609e-02,  -5.10139898e-03,  -7.55260981e-02,\n",
       "          1.79359670e-01,  -1.02310953e-01,   8.07814174e-01,\n",
       "         -3.79261540e-01,   1.05346469e-01,   2.09730714e-01,\n",
       "          7.29338995e-02,  -6.57520235e-01,   6.06663314e-01,\n",
       "          4.62583436e-01,  -1.86864859e-03,  -2.27426046e-01,\n",
       "         -9.74361672e-02,  -7.24075166e-02,   2.49348413e-01,\n",
       "          1.92092852e-01,   5.66263710e-01,   2.61065511e-02,\n",
       "          1.96929609e-02,   5.06153065e-02,  -1.57673511e-01,\n",
       "         -3.22268575e-01,  -5.91680562e-02,   4.26606472e-01,\n",
       "         -1.00587939e-01,  -8.52590667e-02,  -3.94767218e-02,\n",
       "         -1.45204136e-01,  -9.38651687e-02,  -1.95517200e-01,\n",
       "         -1.83098636e-02,  -2.22643666e-01,   1.17809047e-01,\n",
       "          5.41884795e-01,  -2.66132548e-02,  -5.02851130e-03,\n",
       "         -2.43796166e-02,   2.59144160e-02,  -1.22879959e-01,\n",
       "         -2.47313513e-01,   7.89008774e-02],\n",
       "       [  1.25565089e-01,  -1.16241053e-01,   2.76250279e-01,\n",
       "          2.81713274e-01,   2.26444555e+00,   6.45568918e+00,\n",
       "          1.49858888e+00,   2.02079184e-01,  -4.66045204e-02,\n",
       "          0.00000000e+00,   2.25937044e-02,   3.47563535e-03,\n",
       "         -4.49770681e-03,   2.25747716e-02,  -3.15865683e-01,\n",
       "         -4.16880915e-02,  -1.40214517e-02,  -5.33755245e-02,\n",
       "         -3.05880845e-02,   8.65227473e-03,   9.59964402e-02,\n",
       "          7.45117667e-02,  -1.34677847e-02,  -4.07205517e-02,\n",
       "          1.33817423e-02,  -6.51129616e-02,   9.36017341e-02,\n",
       "          6.96149231e-01,  -3.70321981e-02,   1.46562330e-01,\n",
       "         -1.11242237e-01,   1.03203671e-01,   1.28585427e-02,\n",
       "          1.48648098e-01,   3.74787663e-03,   1.35689853e-01,\n",
       "         -1.78490802e-03,   5.06278410e-02,  -1.77856948e-02,\n",
       "         -4.44628099e-03,   1.36423624e-02,   9.72969933e-02,\n",
       "         -2.91694518e-01,   3.18112034e-02,  -4.51905085e-01,\n",
       "         -3.21956552e-03,  -6.85639904e-02,  -6.88460914e-02,\n",
       "         -3.39810102e-02,   1.13881236e-01,   4.04401364e-01,\n",
       "         -1.44352266e-01,  -8.48796562e-02,   7.92231564e-02,\n",
       "          1.50570639e-01,   1.01724109e-01,   4.43722348e-03,\n",
       "         -9.43032373e-02,  -7.50890729e-02,   1.25932326e-01,\n",
       "         -1.64454409e-01,  -6.12034418e-02,  -1.45506050e-01,\n",
       "          2.98779751e-02,   8.91503489e-02,  -1.48500615e-01,\n",
       "          1.20814659e-01,   2.58292451e-02,   4.70566289e-02,\n",
       "         -5.19212080e-01,  -9.54560230e-02,   2.50308763e-02,\n",
       "         -2.31421305e-02,  -9.11059375e-02,  -8.93218983e-02,\n",
       "          2.57195963e-02,   7.45733933e-02,  -7.96962466e-03,\n",
       "         -9.85819718e-02,  -2.36570985e-01,  -5.10356202e-02,\n",
       "          9.11331710e-02,   8.68259757e-02,   1.20814659e-01,\n",
       "          3.76132110e-02,  -3.12286674e-03,  -5.81320542e-03,\n",
       "         -1.02195752e-02,  -1.90620926e-02,   2.29251891e-02,\n",
       "         -4.50930140e-02,   4.94217462e-02,   4.21386951e-02,\n",
       "         -2.77485193e-01,  -4.12647821e-04,   2.39444551e-01,\n",
       "          1.19292664e-01,   2.81136468e-02,  -1.82536163e-01,\n",
       "         -3.18507049e-02,   3.87684382e-02,  -4.74739612e-03,\n",
       "         -2.65896765e-02,  -1.85387997e-01,   3.15961457e-03,\n",
       "         -2.56342772e-01,  -6.67818989e-02,   2.37857732e-02,\n",
       "          7.37634311e-03,  -3.37373184e-02,  -2.64578471e-02,\n",
       "         -1.47637282e-01,   3.78997213e-03,  -2.64999302e-01,\n",
       "          2.08130995e-01,   8.89543877e-02,  -1.13557829e-01,\n",
       "         -2.36539946e-01,  -4.56553593e-02,   1.25140707e-01,\n",
       "         -8.91216257e-02,  -2.16627110e-01,   7.49782598e-02,\n",
       "         -3.05443298e-02,  -1.05573045e-01,  -4.19869101e-01,\n",
       "          1.18196424e-01,   1.76807063e-01,   6.39857334e-01,\n",
       "          1.94618238e-01,  -5.33124244e-01,   8.63875637e-02,\n",
       "         -5.90804137e-02,  -8.44969650e-02,   4.52032263e-02,\n",
       "          3.43008599e-02,  -2.86982343e-01,   2.28793597e-01,\n",
       "          5.43231443e-01,   7.82406544e-03,   1.01350421e-01,\n",
       "          7.10201588e-02,  -6.44525965e-02,  -1.47770259e-01,\n",
       "          7.74621664e-02,   1.37921664e-01,   3.13516257e-02,\n",
       "          1.23868253e-01,   4.93912254e-01,  -2.64519179e-01,\n",
       "          8.06097389e-02,   1.34254705e-01,   2.66962033e-01,\n",
       "          3.87684382e-02,  -6.12588057e-02,  -1.11242237e-01,\n",
       "          4.96800632e-02,   6.48511357e-01,  -3.69748203e-02,\n",
       "          4.03268658e-02,   1.79204841e-01,  -3.42164190e-02,\n",
       "          7.20700929e-02,   6.65585820e-02,  -2.26183451e-02,\n",
       "         -6.04334195e-02,  -1.07771540e-01,  -8.40167915e-03,\n",
       "          3.24203981e-01,   1.58962240e-01,  -9.31342061e-02,\n",
       "         -1.39264269e-02,   1.28631528e-01,   2.21763893e-01,\n",
       "         -5.20998442e-02,  -2.13123563e-01,   1.79776203e-01,\n",
       "         -3.69334108e-02,   6.25395409e-03,  -9.89197881e-02,\n",
       "         -4.80431008e-02,   1.08374918e-01,   1.66152060e-01,\n",
       "         -1.95236341e-01,   1.22492920e-02,  -5.61102517e-01,\n",
       "          7.93180083e-02,   7.17225887e-02,   1.31466197e-01,\n",
       "         -1.16008314e-01,   6.20358964e-02,  -2.72486931e-01,\n",
       "         -3.52487123e-01,  -3.63341160e-02,  -8.23568913e-03,\n",
       "          1.17607938e-01,   7.71897626e-02,  -4.60209758e-01,\n",
       "         -3.58077381e-01,  -6.11560458e-01,  -6.65747917e-03,\n",
       "         -4.80431008e-02,  -6.09158413e-02,   1.76991307e-01,\n",
       "          3.64561960e-01,   1.06087792e-01,  -4.06630815e-01,\n",
       "          1.17570734e-01,   1.65923850e-01,   4.25327359e-02,\n",
       "          5.13823010e-01,  -1.18902667e-01,   1.92432396e-01,\n",
       "         -1.31407202e-01,   2.23280308e-01,  -9.03450632e-02,\n",
       "         -6.45701880e-01,   3.67874793e-02,   2.12955865e-02,\n",
       "          4.32920186e-02,  -1.55923815e-01,   9.37179905e-03,\n",
       "          2.23401423e-01,  -1.30687525e-01]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_cv_L2.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 综合各因素， 所以选择LogisticRegressionCV  模型  L1 正则\n",
    "logless 比较小，虽然不是最小，但也只相差一点， L1惩罚还可以，存在稀疏系数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>listing_id</th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7142618</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7185</td>\n",
       "      <td>-73.9865</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7210040</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7278</td>\n",
       "      <td>-74.0000</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7103890</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7306</td>\n",
       "      <td>-73.9890</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7143442</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7109</td>\n",
       "      <td>-73.9571</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6860601</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7650</td>\n",
       "      <td>-73.9845</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 225 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   listing_id  bathrooms  bedrooms  latitude  longitude  price  \\\n",
       "0     7142618        1.0         1   40.7185   -73.9865   2950   \n",
       "1     7210040        1.0         2   40.7278   -74.0000   2850   \n",
       "2     7103890        1.0         1   40.7306   -73.9890   3758   \n",
       "3     7143442        1.0         2   40.7109   -73.9571   3300   \n",
       "4     6860601        2.0         2   40.7650   -73.9845   4900   \n",
       "\n",
       "   price_bathrooms  price_bedrooms  room_diff  room_num  ...   virtual  walk  \\\n",
       "0      1475.000000     1475.000000        0.0       2.0  ...         0     0   \n",
       "1      1425.000000      950.000000       -1.0       3.0  ...         0     0   \n",
       "2      1879.000000     1879.000000        0.0       2.0  ...         0     0   \n",
       "3      1650.000000     1100.000000       -1.0       3.0  ...         0     0   \n",
       "4      1633.333333     1633.333333        0.0       4.0  ...         0     0   \n",
       "\n",
       "   walls  war  washer  water  wheelchair  wifi  windows  work  \n",
       "0      0    0       0      0           0     0        0     0  \n",
       "1      0    1       0      0           0     0        0     0  \n",
       "2      0    0       0      0           0     0        0     0  \n",
       "3      0    0       0      0           1     0        0     0  \n",
       "4      0    1       0      0           0     0        0     0  \n",
       "\n",
       "[5 rows x 225 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data = pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "test_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_id = test_data['listing_id']\n",
    "test_data.drop(['listing_id'], inplace = True, axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 224 entries, bathrooms to work\n",
      "dtypes: float64(7), int64(217)\n",
      "memory usage: 127.6 MB\n"
     ]
    }
   ],
   "source": [
    "test_data.info()\n",
    "#test_data = test_data[100:1100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "#from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "#ss_X = StandardScaler(lr_y_predict_test)\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "#X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.fit_transform(test_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>low</th>\n",
       "      <th>medium</th>\n",
       "      <th>high</th>\n",
       "      <th>listing_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.139455</td>\n",
       "      <td>0.282941</td>\n",
       "      <td>0.577604</td>\n",
       "      <td>7142618</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.076615</td>\n",
       "      <td>0.186402</td>\n",
       "      <td>0.736983</td>\n",
       "      <td>7210040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.031156</td>\n",
       "      <td>0.106019</td>\n",
       "      <td>0.862826</td>\n",
       "      <td>7103890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.197803</td>\n",
       "      <td>0.294575</td>\n",
       "      <td>0.507622</td>\n",
       "      <td>7143442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.072439</td>\n",
       "      <td>0.369273</td>\n",
       "      <td>0.558288</td>\n",
       "      <td>6860601</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.008897</td>\n",
       "      <td>0.156905</td>\n",
       "      <td>0.834198</td>\n",
       "      <td>6840081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.051127</td>\n",
       "      <td>0.312798</td>\n",
       "      <td>0.636075</td>\n",
       "      <td>6922337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.053183</td>\n",
       "      <td>0.380026</td>\n",
       "      <td>0.566790</td>\n",
       "      <td>6913616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.042883</td>\n",
       "      <td>0.221009</td>\n",
       "      <td>0.736108</td>\n",
       "      <td>6937820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.056834</td>\n",
       "      <td>0.272798</td>\n",
       "      <td>0.670368</td>\n",
       "      <td>6893933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.010448</td>\n",
       "      <td>0.068362</td>\n",
       "      <td>0.921190</td>\n",
       "      <td>6832604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.022939</td>\n",
       "      <td>0.270968</td>\n",
       "      <td>0.706093</td>\n",
       "      <td>6915282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.078720</td>\n",
       "      <td>0.325492</td>\n",
       "      <td>0.595788</td>\n",
       "      <td>7127565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.008440</td>\n",
       "      <td>0.066435</td>\n",
       "      <td>0.925125</td>\n",
       "      <td>6827899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.017336</td>\n",
       "      <td>0.108192</td>\n",
       "      <td>0.874472</td>\n",
       "      <td>6934855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.031379</td>\n",
       "      <td>0.172954</td>\n",
       "      <td>0.795667</td>\n",
       "      <td>6861826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.079640</td>\n",
       "      <td>0.337422</td>\n",
       "      <td>0.582938</td>\n",
       "      <td>6871643</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.003049</td>\n",
       "      <td>0.053591</td>\n",
       "      <td>0.943360</td>\n",
       "      <td>6842542</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.052534</td>\n",
       "      <td>0.269609</td>\n",
       "      <td>0.677858</td>\n",
       "      <td>6934145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.141081</td>\n",
       "      <td>0.370331</td>\n",
       "      <td>0.488588</td>\n",
       "      <td>6829365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.048952</td>\n",
       "      <td>0.227891</td>\n",
       "      <td>0.723158</td>\n",
       "      <td>7167858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.051192</td>\n",
       "      <td>0.326679</td>\n",
       "      <td>0.622129</td>\n",
       "      <td>6859483</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.045149</td>\n",
       "      <td>0.261148</td>\n",
       "      <td>0.693702</td>\n",
       "      <td>6861377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.069466</td>\n",
       "      <td>0.343284</td>\n",
       "      <td>0.587250</td>\n",
       "      <td>6848960</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.029206</td>\n",
       "      <td>0.245076</td>\n",
       "      <td>0.725717</td>\n",
       "      <td>6918850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.112543</td>\n",
       "      <td>0.322102</td>\n",
       "      <td>0.565355</td>\n",
       "      <td>6916867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.039873</td>\n",
       "      <td>0.133438</td>\n",
       "      <td>0.826689</td>\n",
       "      <td>6895840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.090290</td>\n",
       "      <td>0.259685</td>\n",
       "      <td>0.650025</td>\n",
       "      <td>6813539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.157928</td>\n",
       "      <td>0.461285</td>\n",
       "      <td>0.380787</td>\n",
       "      <td>7116900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.014743</td>\n",
       "      <td>0.053457</td>\n",
       "      <td>0.931800</td>\n",
       "      <td>6890328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74629</th>\n",
       "      <td>0.063059</td>\n",
       "      <td>0.343368</td>\n",
       "      <td>0.593573</td>\n",
       "      <td>6855560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74630</th>\n",
       "      <td>0.084427</td>\n",
       "      <td>0.431192</td>\n",
       "      <td>0.484380</td>\n",
       "      <td>6816731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74631</th>\n",
       "      <td>0.045876</td>\n",
       "      <td>0.184000</td>\n",
       "      <td>0.770124</td>\n",
       "      <td>6925764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74632</th>\n",
       "      <td>0.044644</td>\n",
       "      <td>0.119144</td>\n",
       "      <td>0.836212</td>\n",
       "      <td>7139280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74633</th>\n",
       "      <td>0.021873</td>\n",
       "      <td>0.202953</td>\n",
       "      <td>0.775174</td>\n",
       "      <td>6913068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74634</th>\n",
       "      <td>0.001326</td>\n",
       "      <td>0.225355</td>\n",
       "      <td>0.773319</td>\n",
       "      <td>6828445</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74635</th>\n",
       "      <td>0.035093</td>\n",
       "      <td>0.267892</td>\n",
       "      <td>0.697015</td>\n",
       "      <td>6867865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74636</th>\n",
       "      <td>0.008317</td>\n",
       "      <td>0.062507</td>\n",
       "      <td>0.929177</td>\n",
       "      <td>6820397</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74637</th>\n",
       "      <td>0.194820</td>\n",
       "      <td>0.484411</td>\n",
       "      <td>0.320768</td>\n",
       "      <td>6852197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74638</th>\n",
       "      <td>0.113008</td>\n",
       "      <td>0.203124</td>\n",
       "      <td>0.683868</td>\n",
       "      <td>7122934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74639</th>\n",
       "      <td>0.000034</td>\n",
       "      <td>0.000837</td>\n",
       "      <td>0.999129</td>\n",
       "      <td>6907838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74640</th>\n",
       "      <td>0.020215</td>\n",
       "      <td>0.098824</td>\n",
       "      <td>0.880962</td>\n",
       "      <td>6865896</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74641</th>\n",
       "      <td>0.087081</td>\n",
       "      <td>0.350933</td>\n",
       "      <td>0.561986</td>\n",
       "      <td>6840250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74642</th>\n",
       "      <td>0.035645</td>\n",
       "      <td>0.183871</td>\n",
       "      <td>0.780484</td>\n",
       "      <td>6926011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74643</th>\n",
       "      <td>0.037857</td>\n",
       "      <td>0.248962</td>\n",
       "      <td>0.713181</td>\n",
       "      <td>6893100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74644</th>\n",
       "      <td>0.011350</td>\n",
       "      <td>0.073924</td>\n",
       "      <td>0.914726</td>\n",
       "      <td>6867538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74645</th>\n",
       "      <td>0.124075</td>\n",
       "      <td>0.375527</td>\n",
       "      <td>0.500398</td>\n",
       "      <td>6884360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74646</th>\n",
       "      <td>0.019164</td>\n",
       "      <td>0.251908</td>\n",
       "      <td>0.728928</td>\n",
       "      <td>6903964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74647</th>\n",
       "      <td>0.055125</td>\n",
       "      <td>0.184084</td>\n",
       "      <td>0.760790</td>\n",
       "      <td>6907851</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74648</th>\n",
       "      <td>0.191534</td>\n",
       "      <td>0.406981</td>\n",
       "      <td>0.401485</td>\n",
       "      <td>7211166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74649</th>\n",
       "      <td>0.120654</td>\n",
       "      <td>0.438190</td>\n",
       "      <td>0.441157</td>\n",
       "      <td>6844290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74650</th>\n",
       "      <td>0.115975</td>\n",
       "      <td>0.448085</td>\n",
       "      <td>0.435940</td>\n",
       "      <td>6947597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74651</th>\n",
       "      <td>0.003991</td>\n",
       "      <td>0.076609</td>\n",
       "      <td>0.919400</td>\n",
       "      <td>6895423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74652</th>\n",
       "      <td>0.096343</td>\n",
       "      <td>0.224280</td>\n",
       "      <td>0.679377</td>\n",
       "      <td>6812077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74653</th>\n",
       "      <td>0.006068</td>\n",
       "      <td>0.055344</td>\n",
       "      <td>0.938588</td>\n",
       "      <td>6903956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74654</th>\n",
       "      <td>0.082915</td>\n",
       "      <td>0.273451</td>\n",
       "      <td>0.643634</td>\n",
       "      <td>6881005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74655</th>\n",
       "      <td>0.061541</td>\n",
       "      <td>0.201114</td>\n",
       "      <td>0.737344</td>\n",
       "      <td>6835379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74656</th>\n",
       "      <td>0.049957</td>\n",
       "      <td>0.256651</td>\n",
       "      <td>0.693392</td>\n",
       "      <td>6882352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74657</th>\n",
       "      <td>0.306905</td>\n",
       "      <td>0.500882</td>\n",
       "      <td>0.192213</td>\n",
       "      <td>6884758</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74658</th>\n",
       "      <td>0.055305</td>\n",
       "      <td>0.208293</td>\n",
       "      <td>0.736403</td>\n",
       "      <td>6924212</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>74659 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            low    medium      high  listing_id\n",
       "0      0.139455  0.282941  0.577604     7142618\n",
       "1      0.076615  0.186402  0.736983     7210040\n",
       "2      0.031156  0.106019  0.862826     7103890\n",
       "3      0.197803  0.294575  0.507622     7143442\n",
       "4      0.072439  0.369273  0.558288     6860601\n",
       "5      0.008897  0.156905  0.834198     6840081\n",
       "6      0.051127  0.312798  0.636075     6922337\n",
       "7      0.053183  0.380026  0.566790     6913616\n",
       "8      0.042883  0.221009  0.736108     6937820\n",
       "9      0.056834  0.272798  0.670368     6893933\n",
       "10     0.010448  0.068362  0.921190     6832604\n",
       "11     0.022939  0.270968  0.706093     6915282\n",
       "12     0.078720  0.325492  0.595788     7127565\n",
       "13     0.008440  0.066435  0.925125     6827899\n",
       "14     0.017336  0.108192  0.874472     6934855\n",
       "15     0.031379  0.172954  0.795667     6861826\n",
       "16     0.079640  0.337422  0.582938     6871643\n",
       "17     0.003049  0.053591  0.943360     6842542\n",
       "18     0.052534  0.269609  0.677858     6934145\n",
       "19     0.141081  0.370331  0.488588     6829365\n",
       "20     0.048952  0.227891  0.723158     7167858\n",
       "21     0.051192  0.326679  0.622129     6859483\n",
       "22     0.045149  0.261148  0.693702     6861377\n",
       "23     0.069466  0.343284  0.587250     6848960\n",
       "24     0.029206  0.245076  0.725717     6918850\n",
       "25     0.112543  0.322102  0.565355     6916867\n",
       "26     0.039873  0.133438  0.826689     6895840\n",
       "27     0.090290  0.259685  0.650025     6813539\n",
       "28     0.157928  0.461285  0.380787     7116900\n",
       "29     0.014743  0.053457  0.931800     6890328\n",
       "...         ...       ...       ...         ...\n",
       "74629  0.063059  0.343368  0.593573     6855560\n",
       "74630  0.084427  0.431192  0.484380     6816731\n",
       "74631  0.045876  0.184000  0.770124     6925764\n",
       "74632  0.044644  0.119144  0.836212     7139280\n",
       "74633  0.021873  0.202953  0.775174     6913068\n",
       "74634  0.001326  0.225355  0.773319     6828445\n",
       "74635  0.035093  0.267892  0.697015     6867865\n",
       "74636  0.008317  0.062507  0.929177     6820397\n",
       "74637  0.194820  0.484411  0.320768     6852197\n",
       "74638  0.113008  0.203124  0.683868     7122934\n",
       "74639  0.000034  0.000837  0.999129     6907838\n",
       "74640  0.020215  0.098824  0.880962     6865896\n",
       "74641  0.087081  0.350933  0.561986     6840250\n",
       "74642  0.035645  0.183871  0.780484     6926011\n",
       "74643  0.037857  0.248962  0.713181     6893100\n",
       "74644  0.011350  0.073924  0.914726     6867538\n",
       "74645  0.124075  0.375527  0.500398     6884360\n",
       "74646  0.019164  0.251908  0.728928     6903964\n",
       "74647  0.055125  0.184084  0.760790     6907851\n",
       "74648  0.191534  0.406981  0.401485     7211166\n",
       "74649  0.120654  0.438190  0.441157     6844290\n",
       "74650  0.115975  0.448085  0.435940     6947597\n",
       "74651  0.003991  0.076609  0.919400     6895423\n",
       "74652  0.096343  0.224280  0.679377     6812077\n",
       "74653  0.006068  0.055344  0.938588     6903956\n",
       "74654  0.082915  0.273451  0.643634     6881005\n",
       "74655  0.061541  0.201114  0.737344     6835379\n",
       "74656  0.049957  0.256651  0.693392     6882352\n",
       "74657  0.306905  0.500882  0.192213     6884758\n",
       "74658  0.055305  0.208293  0.736403     6924212\n",
       "\n",
       "[74659 rows x 4 columns]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 综合各因素， 所以选择LogisticRegressionCV  模型  L1 正则\n",
    "# logless 比较小，虽然不是最小，但也只相差一点， L1惩罚还可以，存在稀疏系数\n",
    "\n",
    "#预测概率\n",
    "lr_y_predict_test = lrcv_L1.predict_proba(X_test)\n",
    "\n",
    "submission = pd.DataFrame(lr_y_predict_test, columns=[ 'low', 'medium', 'high'])\n",
    "submission['listing_id'] = test_id\n",
    "submission\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "submission.to_csv('w2_LogisticRegressionCV_L1_predict_resulf.csv', index = False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
